package com.feng.study.model;

import com.fasterxml.jackson.annotation.*;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Objects;

/**
 * jackson使用demo
 * 1.@JsonFilter("product_filter")
 *      1.动态序列化指定字段。
 *      2.序列化的时候必须加上过滤器,否则会抛异常,json = objectMapper.writeValueAsString(cart)
 * 2.@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
 *      时间格式化注解
 * 3.@JsonProperty(value = "id")
 *      注解用于属性上，作用是把该属性的名称序列化为另外一个名称
 *      如把productId属性序列化为id，@JsonProperty(value="id")。
 * 4.@JsonInclude(JsonInclude.Include.NON_NULL)
 *      1.将该标记放在属性上，如果该属性为NULL则不参与序列化
 *      2.如果放在类上边,那对这个类的全部属性起作用
 * 5.@JsonIgnoreProperties(ignoreUnknown = true)
 *      忽略类中不存在的字段
 *      比如json字符串中有个aaa:123,则不会进行转换
 *
 */
@Data
@Accessors(chain = true)
//@JsonFilter("product_filter")
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Product {

//    @JsonProperty(value = "id")
    private String productId;
    private String name;

//    @JsonIgnore//直接忽略
//    @JsonInclude(JsonInclude.Include.NON_NULL)//值为空的时候才忽略
    private String price;

    private BigDecimal priceValue;

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date creatTime;

    private Integer num;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return Objects.equals(name, product.name) &&
                Objects.equals(price, product.price);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, price);
    }
}


